package us.proyecto.canarios.actions.concursos;

import static org.jboss.seam.ScopeType.SESSION;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.FlushModeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelectionIndex;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.log.Log;

import us.proyecto.canarios.dao.ConcursoDAO;
import us.proyecto.canarios.dao.DiccionarioDAO;
import us.proyecto.canarios.dao.PajarosDAO;
import us.proyecto.canarios.dao.ProvinciaDAO;
import us.proyecto.canarios.dao.UsuarioDAO;
import us.proyecto.canarios.domain.Asociacion;
import us.proyecto.canarios.domain.Concurso;
import us.proyecto.canarios.domain.Criador;
import us.proyecto.canarios.domain.Municipio;
import us.proyecto.canarios.domain.Pajaro;
import us.proyecto.canarios.domain.Provincia;
import us.proyecto.canarios.domain.Puntuacion;
import us.proyecto.canarios.domain.Tipo;
import us.proyecto.canarios.domain.Usuario;

@Name("gestionAsocBD")
@Scope(ScopeType.SESSION)
public class ConsultaAsocAction {

    @Logger
    Log log;


	@In(create = true, required = false)
	private Usuario user;

    @In(create = true)
    private UsuarioDAO usuarioDAO;

    @In(create = true)
	private ConcursoDAO concursoDAO;

	@In(create = true)
	private DiccionarioDAO diccionariosDAO;

	@In(create = true)
	private PajarosDAO pajarosDAO;

	private List<Criador> listaCriadores;

	@In(create = true)
	private ProvinciaDAO provinciaDAO;

	private List<Provincia> listaProvincias;
	private List<Municipio> listaMunicipios;

	private Provincia provinciaSel;
	private Municipio municipioSel;

	private String nombreAsoc;

	@DataModel("listaAsociaciones")
	private List<Asociacion> listaAsociaciones;
    @DataModelSelectionIndex("listaAsociaciones")
    private int index;

    private Asociacion asoc;

    public void buscar() {
    	String where = " 1 = 1 ";
    	if(nombreAsoc!= null && !nombreAsoc.equals("")){
    		where = where + " and upper(a.nombre) like upper('"+nombreAsoc+"') ";
    	}
    	if(provinciaSel != null){
    		where = where + " and a.provincia.provincia = " + provinciaSel.getProvincia();
    	}
    	if(municipioSel != null){
    		where = where + " and a.municipio.id= " + municipioSel.getId();
    	}

    	listaAsociaciones = usuarioDAO.getAsociacionesByWhere(where);
    	 if(listaAsociaciones == null || listaAsociaciones.size()==0){
             FacesMessages.instance().add("No hay asociaciones que coincidan con los criterios introducidos");
         }

    }


    public String traduce(String s){
        String res="";
        if(s.equals("true")){
            res="Si";
        }else{
            res="No";
        }
        return res;

    }


    @Begin(join = true, flushMode=FlushModeType.MANUAL)
    public String gestion() {
		provinciaSel = null;
		municipioSel = null;

		return "true";
	}


    public List<Provincia> getListaProvincias() {
		if (listaProvincias == null) {
			listaProvincias = provinciaDAO.getProvincias();
		}
		return listaProvincias;
	}

	public void setListaProvincias(List<Provincia> listaProvincias) {
		this.listaProvincias = listaProvincias;
	}

	public List<Municipio> getListaMunicipios() {
		if (provinciaSel == null) {
			listaMunicipios = new ArrayList<Municipio>();
		} else {
			listaMunicipios = provinciaDAO.getMunicipios(""
					+ provinciaSel.getProvincia());
		}
		return listaMunicipios;
	}

	public void setListaMunicipios(List<Municipio> listaMunicipio) {
		this.listaMunicipios = listaMunicipio;
	}


	public Provincia getProvinciaSel() {
		return provinciaSel;
	}


	public void setProvinciaSel(Provincia provinciaSel) {
		this.provinciaSel = provinciaSel;
	}


	public Municipio getMunicipioSel() {
		return municipioSel;
	}


	public void setMunicipioSel(Municipio municipioSel) {
		this.municipioSel = municipioSel;
	}


	public List<Asociacion> getListaAsociaciones() {
		return listaAsociaciones;
	}


	public void setListaAsociaciones(List<Asociacion> listaAsociaciones) {
		this.listaAsociaciones = listaAsociaciones;
	}


	public int getIndex() {
		return index;
	}


	public void setIndex(int index) {
		this.index = index;
	}


	public String getNombreAsoc() {
		return nombreAsoc;
	}


	public void setNombreAsoc(String nombreAsoc) {
		this.nombreAsoc = nombreAsoc;
	}


	public Asociacion getAsoc() {
		return asoc;
	}


	public void setAsoc(Asociacion asoc) {
		this.asoc = asoc;
	}

	public void select(){
		asoc = listaAsociaciones.get(index);
	}

}

